package com.atguigu.gulimall.seckill;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * 总结下秒杀服务的关键
 * （1）独立部署，防止服务崩溃连累其他服务
 * （2）上架即提前放入redis缓存
 * （3）分布式信号量，限流
 * （4）随机码 防止脚本提前批量操作
 * （5）下单逻辑只是发一个消息，后续慢慢消费，流量削峰
 * （6）动静分离。静态资源放到nginx中，减少服务器压力
 * --------------------------------------------
 * （7）上述操作保证了快，但再快总有一个最高处理能力
 * 比如我每秒能处理10万个请求，但一下子来了100万个请求，这就会造成请求的积压，服务器资源耗尽，最终导致服务崩溃
 * 为了避免这个问题，可以用sentinel进行限流、熔断、降级，保证稳！
 */


@EnableRedisHttpSession
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class GulimallSeckillApplication {

	public static void main(String[] args) {
		SpringApplication.run(GulimallSeckillApplication.class, args);
	}

}
